<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>async和await</title>
</head>
<body>
    <script src="js/jquery-1.11.1.js"></script>
    <script>


        //用promise 和 async、await
        function ajax(url,data) {
            return new Promise(function (resolve,reject) {
                $.ajax({
                    url: `${url}?code=${data.code}`,
                    success: function (res) {
                        // if (res.status) {
                        //     resolve(res);
                        // } else {
                        //     reject(res);
                        // }
                        resolve(res);
                    },
                    error: function (err) {
                        // reject(err);
                    }
                })
            })
        }

        async function getData() {
            let getTokenObj = await ajax('http://youyong.ba:8080/mock/609a94bd9fdbd7143b8d6737/aa/getToken', {code: 'asdfasdfasdf'});
            
            // if (getTokenObj.data.token) {
                // let data =  ajax('http://youyong.ba:8080/mock/609a94bd9fdbd7143b8d6737/aa/manage/list/index',{code : getTokenObj.data.token});
                let data =  await ajax('http://youyong.ba:8080/mock/609a94bd9fdbd7143b8d6737/aa/manage/list/index',{code : 'xxx'});
            // } else {
            //     console.log('token不能为空');
            // }

        }

        getData();
        
        

        //实现一个sleep函数
        // function sleep(delay) {
        //     return new Promise(function (resolve, reject) {
        //         setTimeout(function (){
        //             resolve(delay);
        //         }, delay);
        //     });
        // }

        // async function fn (delay) {
        //     console.log(1)
        //     await sleep(5000);
        //     console.log(2);
        // }

        // fn()


        //用 async 和 await 优化 promise
        
        // function setPromise(str, delay) {
        //     return new Promise(function (resolve, reject) {
        //         setTimeout(function () {
        //             resolve(str);
        //         }, delay);
        //     });
        // }

        // async function getStr() {
        //     console.log(await setPromise("第一个", 3000));
        //     console.log(await setPromise("第二个", 2000));
        //     console.log(await setPromise("第三个", 1000));
        // }

        // getStr()
        

        // const p = new Promise(function (resolve, reject) {
        //     setTimeout(function () {
        //         reject('失败')
        //     }, 3000)
        // })

        // //结合 await 
        // async function fn() {
        //     try {
        //         let result = await p;
        //     } catch(err) {
        //         console.log(err);
        //     }
        // }

        // fn();
        
        //async 声名方法， 用then或catch返回值
        // async function fn () {
        //     return 'test'
        // }
        // let result = fn();
        
        // result.then(function (res) {
        //     console.log(res);
        // })
        

        //不用 async 定义函数
        // function fn () {
        //     return 'test';
        // }
        // let result = fn();
        // console.log(result);

        //返回结果是一个 Promise对象 
    //    async function fn() {
    //     return new Promise((resolve, reject)=>{
    //         // resolve('成功的数据');
    //         reject("失败的错误");
    //     })
    //     }

    //     let result = fn();
    //     console.log(result);

       


        //throw new Error("出错了!!!");
        // async function fn() {
        //     throw new Error("出错了!!!");
        // }

        // let result = fn();
        // console.log(result);

        //返回非primise对象，返回空
        // async function fn() {
        //     return ;
        // }

        // let result = fn();
        // console.log(result);

        //返回非promise对象,返回字符串
        // async function fn() {
        //     return 'test';
        // }

        // let result = fn();
        // console.log(result);
    </script>
</body>
</html>